<?php

/**
 * Clase encargada de manejar los datos de los usuarios
 *
 * @author Johan AR
 */
class Usuario {

  /**
   * @protected nombres
   * @var string
   */
  protected $nombres = null;

  /**
   * @protected email
   * @var string
   */
  protected $email = null;

  /**
   * @protected fecha_nacimiento
   * @var string
   */
  protected $fecha_nacimiento = null;

  /**
   * Colleccion de habilidades
   * @protected habilidades
   * @var array habilidades[]
   */
  protected $habilidades = null;

  /**
   * Establece el valor de los nombres
   * @param  string $v nuevo valor
   * @return Usuario Objeto actual (soporte para fluidez)
   */
  public function setNombres($v) {
    $this->nombres = $v;
    return $this;
  }

  /**
   * Obtiene el valor de los Nombres
   *
   * @return string
   */
  public function getNombres() {
    return $this->nombres;
  }

  /**
   * Establece el valor del email
   * @param  string $v nuevo valor
   * @return Usuario Objeto actual (soporte para fluidez)
   */
  public function setEmail($v) {
    $this->email = $v;
    return $this;
  }

  /**
   * Obtiene el valor del Email
   *
   * @return string
   */
  public function getEmail() {
    return $this->email;
  }

  /**
   * Establece el valor de la fecha de nacimiento como una version normalizada de valor especificado date/time.
   * 
   * @param      mixed $v string
   * @return Usuario Objeto actual (soporte para fluidez)
   */
  public function setFechaNacimiento($v) {
    $this->fecha_nacimiento = $v;
    return $this;
  } // setFechaNacimiento()

  /**
   * Obtiene el valor de la Fecha de nacimiento [formato opcional]
   * 
   *
   * @return     mixed Formateado date/time valor como string o objeto DateTime (si format es NULL), NULL si fecha_nacimiento es NULL y 0 si es 0000-00-00
   */
  public function getFechaNacimiento() {
      return $this->fecha_nacimiento;
  } // getFechaNacimiento()

   /**
   * Obtiene las habilidades
   *
   * @return array habilidades[]
   */
  public function getHabilidades() {
    return $this->habilidades;
  }

   /**
   * Establece el valor del email
   * @param  string $v nuevo valor
   * @return Usuario Objeto actual (soporte para fluidez)
   */
  public function setHabilidades($v) {
    $this->habilidades = $v;
    return $this;
  }

  /**
   * Metodo llamado para asociar una habilidad
   *
   * @param      string $s habilidad ej.
   * @return     Usuario Objeto actual (soporte para fluidez)
   */
  public function addHabilidad($v) {
    $this->habilidades[] = $v;
//    array_unique($this->habilidades);
    return $this;
  }
  
  public function isValid() {
    $errores = '';
    if (!$this->getEmail())
      $errores .= 'Email requierido<br>';
    elseif (!preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/', $this->getEmail()))
      $errores .= 'Email invalido<br>';
    if (!$this->getNombres())
      $errores .= 'Nombres requieridos<br>';
    if (!$this->getFechaNacimiento())
      $errores .= 'Fecha de nacimiento requerida<br>';
    elseif (!preg_match('/^\d{1,2}\/\d{1,2}\/\d{4}$/', $this->getFechaNacimiento()))
      $errores .= 'Fecha de nacimiento invalida, el formato debe ser "dd/mm/yyyy"<br>';
//    if (!$this->getHabilidades())
//      $errores .= 'Habilidades requeridas<br>';
    if ($errores)
      return $errores;
    else
      return true;
  }

  public function getEdad() {
    if (!$this->getFechaNacimiento())
      return false;
    list($day, $month, $year) = explode("/", $this->getFechaNacimiento());
    $year_diff = date("Y") - $year;
    $month_diff = date("m") - $month;
    $day_diff = date("d") - $day;
    if ($month_diff < 0)
      $year_diff--;
    elseif (($month_diff == 0) && ($day_diff < 0))
      $year_diff--;
    return $year_diff < 0 ? 0 : $year_diff;
  }
  
  public function buildPdf() {
    require_once(DIR_ROOT . "/lib/dompdf/dompdf_config.inc.php");

    $html =
      '<html><body>'.
      '<h1>' . $this->getNombres() . '</h1>'.
      '<table>' .
      '<tr><th>Edad</th><td>' . $this->getEdad() . '</td></tr>' .
      '<tr><th>Email</th><td>' . $this->getEmail() . '</td></tr>' .
      '</table>' .
      '<h3>Habilidades</h3>'.
      '<table>';
    $habilidades = $this->getHabilidades();
    foreach ($habilidades as $value)
            $html .= '<tr><th>' . $key . '</th><td>' . $value . '</td></tr>';
    $html .=
      '</table>' .
      '</body></html>';
    
    $dompdf = new DOMPDF();
    $dompdf->load_html($html);
    $dompdf->render(); 
    $pdfoutput = $dompdf->output(); 
    $filename = DIR_ROOT . '/pdf/' . $this->getEmail() . ".pdf";
    $fp = fopen($filename, "a"); 
    fwrite($fp, $pdfoutput);
    fclose($fp);
    return true;
  }

}